package controller.listeners.manualCode;


import java.util.HashMap;

import model.ManualCodeModel;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;


import business.ViewLogger;
import business.database.cache.CacheCodeCorp;



import view.ManualCodeView;
import view.ViewUtils;

/**
 * Controlador de pulsacion de teclas sobre la tabla de corps filtrados en cache
 * @author 53385255R
 *
 */
public class CacheCodeCorpsKeyDownListener implements Listener {


	private ManualCodeView _view;
	private ManualCodeModel _model;
	
			/**
			 * @param view
			 * @param model
			 */
			public CacheCodeCorpsKeyDownListener(ManualCodeView view,
					ManualCodeModel model) {
				this._model = model;
				this._view = view;
			}
			
			/**
			 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
			 */
			@Override
			public void handleEvent(Event event) {
			
				System.out.println(event.keyCode);
				System.out.println(event.stateMask);
				System.out.println(event.character);
				System.out.println("---------------");
				if ((event.keyCode == 326767)){//32 es space && (event.stateMask == SWT.CTRL)) {// || (event.stateMask == SWT.F5)){//&& (event.keyCode == SWT.CTRL)) {
					_view.changeCheckedInSelectedCorps();
					_model.setCheckedIdCodeCorp(_view.getChecked_cache_idcodecorp());
					
				} else if ((event.keyCode == 101) && (event.stateMask == SWT.CTRL)) {//101 es la e o E
					
					if (_model.get_selected_idcodecorp().size() > 1) {
						boolean ch = _view.isCheckedFirstSelectedCorp();
						//desmarco los demas
						_view.checkAllCorps(false);
						_model.removeAllCheckedidcodedcorp();
						//Cambio el marcaje de los seleccionados
						_view.checkSelectedCorps(!ch);
					} else {
						_view.changeCheckedInAllCorps();
					}
					
					_model.setCheckedIdCodeCorp(_view.getChecked_cache_idcodecorp());
					
				} else if (event.keyCode == SWT.ARROW_RIGHT) {
					_model.set_custom_corp(_view.getSelected_cache_code_corp());
					_view.setCorpCustomText(_model.get_custom_corp());
					_view.setCandidateCenters(_model.get_candidate_centers_custom(), _model.get_custom_corp());
					_view.setFocusOnCustomCorp();
				
				} else if (event.keyCode == SWT.ARROW_LEFT) {
					_view.setCorpFilter(_view.getSelected_cache_code_corp());
					_view.setFocusOnCorpFilter();
				
				}else if ((event.keyCode == SWT.SHIFT) && (event.stateMask == SWT.CTRL)) {
					_view.setFocusOnCenterTable();
				} else if (event.keyCode == SWT.DEL) {
					if (ViewUtils.getInstance().confirmationMessage("Eliminación", "Se van a eliminar los centros codificados de los corps seleccionados ¿Está seguro?\nEsta acción no elimina los centros candidatos.")) {
						HashMap<Integer,CacheCodeCorp> modCache = _model.deletePosCodeCorpCenters();
						_view.updateCacheCodeCorps(modCache);
					}
				} else if ((event.keyCode == SWT.CR) && (event.stateMask == SWT.CTRL)) {
					if (ViewUtils.getInstance().confirmationMessage("Validar codificación", "Se va a validar la codificación realizada en los corps checkeados que esten codificados.\nSe eliminarán los centros candidatos de la tabla Precodecorp y solo quedará el centro con el que se ha codificado en PosCodeCorps.\n¿Está seguro que desea continuar?")) {
						boolean ok = true;
						if (_view.are_checked_corps_commented())
								ok = ViewUtils.getInstance().confirmationMessage("Confirmacion por comentario", "Algunos de los corps a validar contienen comentarios. ¿Esta seguro de querer realizar esta validación?");
						if (ok) {
							_model.deletePreCodeCorpCentersForCodedCorps();
							updateView();
						}
					}
				} else if ((event.keyCode == 105 || event.keyCode == 73) && (event.stateMask == SWT.CTRL))  { //Control + i
					ViewUtils.getInstance().informationMessage("Información global del proceso", _model.get_globalInfoMessage(), true);
				}  else if (event.keyCode == SWT.F7) {
					String prevNote = _view.getCommentOfSelectedCorp();
					String note = ViewUtils.getInstance().textMessage("Escriba Comentario", "Modifique el comentario", prevNote);
					HashMap<Integer,CacheCodeCorp> modcorps = _model.insertComment(note);
					_view.updateCacheCodeCorps(modcorps);
				} else if (event.keyCode == SWT.F8) {
					HashMap<Integer,CacheCodeCorp> modcorps = _model.deleteComments();
					_view.updateCacheCodeCorps(modcorps);
				} else if  (event.keyCode == SWT.F1) {
					
					String help = 		"\n\nACCIONES PARA EL POSPROCESADO\n- SPACE: marca o desmarca los corps seleccionados)." +
					"\n- Ctrl + 'e': marca o desmarca los corps seleccionados. Si hay uno o ninguno seleccionados marcará o desmarcará toda la tabla." +
					"\n- Ctrl + 'i': ofrece una ventana con la información del numero de corps que faltan por codificar." +
					"\n- Doble Click: copia el corp a la caja de corp personalizado y pone el foco en la misma." +
					"\n- Supr: decodifica todos los corps checkeados. (Elimina su información de la tabla PosCodeCorp)." +
					"\n- Ctrl + Intro: VALIDA LA CODIFICACIÓN de los corps checkeados (elimina los candidatos estan poscodificados (verdes))." +
					"\n- '<-': copia el texto del corp en el cuadro de busquedas. Deja el foco en dicho cuadro." +
					"\n- '->': copia el texto del corp en el cuadro de texto del corp personalizado. Deja el foco en dicho cuadro de texto." +
					"\n- F7: inserta un comentario para los corps checkeados." +
					"\n- F8: elimina los comentarios de los corps checkeados." +
					"\n- 'w': Lanza una búsqueda en el navegador de los docuementos que tengán el corp seleccionado." +
					"\n- 's': Busca los documentos relacionados con el Corp y abre la ventana de búsqueda de scopus" +
					"\n- Ctrl + Shift: pone el foco en la tabla de centros.";
					ViewUtils.getInstance().informationMessage("Ayuda tabla Corps", help,true);
					ViewLogger.getInstance().info(help);
							
				}else if(event.keyCode == 119){
					_model.SearchDocWoSFromSelectedIdcodecorp();
					
				}else if(event.keyCode==115){
					_model.SearchDocScopusFromSelectedIdcodecorp();
				}
			}

			private void updateView() {
				
				_view.setCachePreCodeCorps(_model.get_cache_precodecorps());
				
				
			}
			
		
			
		}